const { validationResult, buildCheckFunction, ValidationChain } = require('express-validator')
const { isValidObjectId } = require('mongoose')

// 一次返回多个错误信息
// exports = module.exports = validations => {
//   return async (req, res, next) => {
//     await Promise.all(validations.map(validation => validation.run(req)))

//     const errors = validationResult(req)
//     if (errors.isEmpty()) {
//       return next()
//     }

//     res.status(400).json({ errors: errors.array() })
//   }
// }

// 一次返回一个错误信息
exports = module.exports = validations => {
  return async (req, res, next) => {
    for (let validation of validations) {
      const result = await validation.run(req);
      if (result.errors.length) break;
    }

    const errors = validationResult(req);
    if (errors.isEmpty()) {
      return next();
    }

    res.status(400).json({ errors: errors.array() });
  };
};
// 通过 mongoose 验证当前id是否有效
// locations：要从中收集数据的请求位置数组。
// 可以包括任何的body，cookies，headers，params或query。
exports.isValidObjectId = (location, fields) => {
  return buildCheckFunction(location)(fields).custom(async value => {
    if (!isValidObjectId(value)) {
      return Promise.reject('ID 不是一个有效的 ObjectID')
    }
  })
}
